package br.com.toscano.gobra.view;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import javax.faces.model.SelectItem;
import javax.inject.Inject;
import br.gov.frameworkdemoiselle.annotation.PreviousView;
import br.gov.frameworkdemoiselle.stereotype.ViewController;
import br.gov.frameworkdemoiselle.template.AbstractEditPageBean;
import br.gov.frameworkdemoiselle.transaction.Transactional;
import br.com.toscano.gobra.business.BoletimMedicaoBC;
import br.com.toscano.gobra.business.EstadoBC;
import br.com.toscano.gobra.business.ObraBC;
import br.com.toscano.gobra.business.UnidadeOrcamentariaBC;
import br.com.toscano.gobra.domain.BoletimMedicao;
import br.com.toscano.gobra.domain.Estado;
import br.com.toscano.gobra.domain.Obra;
import br.com.toscano.gobra.domain.UnidadeOrcamentaria;

@ViewController
@PreviousView("./boletimMedicao_list.jsf")
public class BoletimMedicaoEditMB extends AbstractEditPageBean<BoletimMedicao, Long> {

	
	private static final long serialVersionUID = 1L;

	private Integer posicaoItem;
	
	private BigDecimal quantidadePrevisto;
	private BigDecimal quantidadeMedido;
	private BigDecimal quantidadeAcumulado;

	private BigDecimal valorPrevisto;
	private BigDecimal valorMedido;
	private BigDecimal valorAcumulado;

	private BigDecimal percentualPeriodo;


	public BigDecimal getQuantidadeMedido() {
		return quantidadeMedido;
	}

	public void setQuantidadeMedido(BigDecimal quantidadeMedido) {
		this.quantidadeMedido = quantidadeMedido;
	}

	public BigDecimal getQuantidadeAcumulado() {
		return quantidadeAcumulado;
	}

	public void setQuantidadeAcumulado(BigDecimal quantidadeAcumulado) {
		this.quantidadeAcumulado = quantidadeAcumulado;
	}

	

	public BigDecimal getValorPrevisto() {
		return valorPrevisto;
	}

	public void setValorPrevisto(BigDecimal valorPrevisto) {
		this.valorPrevisto = valorPrevisto;
	}

	public BigDecimal getValorMedido() {
		return valorMedido;
	}

	public void setValorMedido(BigDecimal valorMedido) {
		this.valorMedido = valorMedido;
	}

	public BigDecimal getValorAcumulado() {
		return valorAcumulado;
	}

	public void setValorAcumulado(BigDecimal valorAcumulado) {
		this.valorAcumulado = valorAcumulado;
	}

	public BigDecimal getPercentualPeriodo() {
		return percentualPeriodo;
	}

	public void setPercentualPeriodo(BigDecimal percentualPeriodo) {
		this.percentualPeriodo = percentualPeriodo;
	}

	public BigDecimal getQuantidadePrevisto() {
		return quantidadePrevisto;
	}

	public void setQuantidadePrevisto(BigDecimal quantidadePrevisto) {
		this.quantidadePrevisto = quantidadePrevisto;
	}

	@Inject
	private EstadoBC estadoBC;
	private List<SelectItem> estados;
	private String estadoEmpresa;
	private String estadoPrefeitura;
	
	public List<SelectItem> getEstados() {
		estados = new ArrayList<SelectItem>();
		List<Estado> lista = estadoBC.findAll();
		for (Estado obj: lista) {
			estados.add(new SelectItem(obj.getUf() , obj.getDescricao()));
		}

		return estados;
	}

	public void setEstados(List<SelectItem> estados) {
		this.estados = estados;
	}

	public String getEstadoEmpresa() {
		return estadoEmpresa;
	}

	public void setEstadoEmpresa(String estadoEmpresa) {
		this.estadoEmpresa = estadoEmpresa;
	}

	public String getEstadoPrefeitura() {
		return estadoPrefeitura;
	}

	public void setEstadoPrefeitura(String estadoPrefeitura) {
		this.estadoPrefeitura = estadoPrefeitura;
	}

	private List<SelectItem> servicos;
	private Long servico;
	
	public List<SelectItem> getServicos() {
		return servicos;
	}

	public void setServicos(List<SelectItem> servicos) {
		this.servicos = servicos;
	}

	public Long getServico() {
		return servico;
	}

	public void setServico(Long servico) {
		this.servico = servico;
	}

	@Inject
	private ObraBC obraBC;
	private List<SelectItem> obras;
	private Long obra;

	public List<SelectItem> getObras() {
		obras = new ArrayList<SelectItem>();
		List<Obra> lista = obraBC.findAll();
		for (Obra obj: lista) {
			obras.add(new SelectItem(obj.getId() , obj.getTitulo()));
		}
		return obras;
	}

	public void setObras(List<SelectItem> obras) {
		this.obras = obras;
	}

	public Long getObra() {
		if(obra == null && this.getBean().getObra() != null) {
			obra = this.getBean().getObra().getId();
			unidadeOrcamentaria = this.getBean().getObra().getUnidadeOrcamentaria().getId();
		}
		return obra;
	}

	public void setObra(Long obra) {
		this.obra = obra;
	}
	
	@Inject
	private UnidadeOrcamentariaBC unidadeOrcamentariaBC;
	private List<SelectItem> unidadeOrcamentarias;
	private Long unidadeOrcamentaria;

	public List<SelectItem> getUnidadeOrcamentarias() {
		unidadeOrcamentarias = new ArrayList<SelectItem>();
		List<UnidadeOrcamentaria> lista = unidadeOrcamentariaBC.findAll();
		for (UnidadeOrcamentaria obj: lista) {
			unidadeOrcamentarias.add(new SelectItem(obj.getId() , obj.getDescricao()));
		}
		return unidadeOrcamentarias;
	}

	public void setUnidadeOrcamentarias(List<SelectItem> unidadeOrcamentarias) {
		this.unidadeOrcamentarias = unidadeOrcamentarias;
	}

	public Long getUnidadeOrcamentaria() {
		if(obra == null && this.getBean().getObra() != null) {
			unidadeOrcamentaria = this.getBean().getObra().getUnidadeOrcamentaria().getId();
		}
		return unidadeOrcamentaria;
	}

	public void setUnidadeOrcamentaria(Long unidadeOrcamentaria) {
		this.unidadeOrcamentaria = unidadeOrcamentaria;
	}
	

	@Inject
	private BoletimMedicaoBC boletimMedicaoBC;
	
	@Override
	@Transactional
	public String delete() {
		this.boletimMedicaoBC.delete(getId());
		return getPreviousView();
	}
	
	public void montarObjeto(){
		if(this.obra != null) {
			this.getBean().setObra(this.obraBC.load(this.obra));
		}
		if(this.estadoEmpresa != null) {
			this.getBean().setUfCreaEngenheiroEmpresa(this.estadoBC.load(this.estadoEmpresa));
		}
		if(this.estadoPrefeitura != null) {
			this.getBean().setUfCreaEngenheiroPrefeitura(this.estadoBC.load(this.estadoPrefeitura));
		}
	}
	
	@Override
	@Transactional
	public String insert() {
		montarObjeto();
		this.boletimMedicaoBC.insert(getBean());
		return getPreviousView();
	}
	
	@Override
	@Transactional
	public String update() {
		montarObjeto();
		this.boletimMedicaoBC.update(getBean());
		return getPreviousView();
	}
	
	@Override
	protected BoletimMedicao handleLoad(Long id) {
		setBean(this.boletimMedicaoBC.load(id));
		
		return this.getBean();
	}

	public Integer getPosicaoItem() {
		return posicaoItem;
	}

	public void setPosicaoItem(Integer posicaoItem) {
		this.posicaoItem = posicaoItem;
	}
	
	public void adicionarItem(){
		
	}
	
	public void removerItem(){
		
	}
}